<?php
header('Content-type: text/html');
$target = "http://www.mabinogi.jp/6th/launcher/launcher.asp";
$request = file_get_contents($target);
echo html2xhtml($request);

/*
// HTMLをXMLとして処理。
$xml = new SimpleXMLElement($request);
if(!$xml){
	die('Cannot Load '.$target.'.');
}else{
	echo $xml->body[0]->a;
}
*/

/**
 * 未整形HTMLをSimpleXMLへ変換
 *
 * @param string $html_ 未整形HTML
 * @param bool   $flg_  おせっかい？な処理を行うか。
 * @return SimpleXMLElement
 */
function html_to_simplexml($html_, $flg_ = true)
{
	// HTMLはUTF-8に変換しておくこと。
	// metaタグ中のcharsetはUTF-8にしておくこと。
//	$html_ = ;
	
	// 未整形HTMLをDOMに読込む
	// 読むときにWarningが出ることがあるので@で抑制する。
	$dom = new DomDocument("1.0", "UTF-8");
	@$dom->loadHTML($html_);
	
	// DOMをSimpleXMLへ変換
	$ret = simplexml_import_dom($dom);

	// ここまででもいいのだけど。
	// XML宣言が付いていないので付与する。
	if ($flg_ === true) {
		$str = $ret->asXML();
		{
			// XML宣言付与
			if (1 !== preg_match('/^<\\?xml version="1.0"/', $str)) {
				$str = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $str;
			}
			
			// これもなくても良いかもしれないけど、
			// HTML中の改行が数値文字参照になってしまったので、
			// 文字に戻す。
			$str = numentToChar($str);
		}
		$ret = simplexml_load_string($str);
	}
	return $ret;
}

/**
 * 数値文字参照を文字に戻す。
 *
 * 以下より
 * http://blog.koshigoe.jp/archives/2007/04/phpdomdocument.html
 * 
 * @param string $string
 * @return string
 */
function numentToChar($string)
{
    $excluded_hex = $string;
    if (preg_match("/&#[xX][0-9a-zA-Z]{2,8};/", $string)) {
        // 16 進数表現は 10 進数に変換
        $excluded_hex = preg_replace("/&#[xX]([0-9a-zA-Z]{2,8});/e",
                                     "'&#'.hexdec('$1').';'", $string);
    }
    return mb_decode_numericentity($excluded_hex,
                                   array(0x0, 0x10000, 0, 0xfffff),
                                   "UTF-8");
}

function html2xhtml($html){
	$opts = array(
		"output-xhtml" => true,
		"clean" => true,
		"alt-text" => "",
		"drop-font-tags" => true,
		"drop-empty-paras" => true,
		"wrap" => 80,
		"logical-emphasis" => true,
		"enclose-text" => true,
		"enclose-block-text" => true,
		"show-body-only" => true
	);

	tidy_set_encoding('UTF8');
	return tidy_repair_string($html,$opts);
}

function test($html_, $flg_)
{
	$simplexml = html_to_simplexml($html_, $flg_);
	
	echo '↓↓↓変換元 <br />';
	$str = print_r($html_, true);
	echo '<pre>';
	echo htmlentities($str, ENT_QUOTES, mb_internal_encoding());
	echo '</pre>';
	
	echo '↓↓↓変換後 <br />';
	$str = print_r($simplexml, true);
	echo '<pre>';
	echo htmlentities($str, ENT_QUOTES, mb_internal_encoding());
	echo '</pre>';
		
	echo '↓↓↓再構築 <br />';
	$str = $simplexml->asXML();
	echo '<pre>';
	echo htmlentities($str, ENT_QUOTES, mb_internal_encoding());
	echo '</pre>';
}

$xml = html_to_simplexml($request);

foreach ($xml->xpath('//a') as $a) {
	echo '<a href="'.$a[0]->attributes()->href.'">';
	echo $a.'</a><br />';
}

//test($request);
// echo var_dump($xml->xpath('//a'));
?>
